IAMの権限昇格のパスを「PMapper」を利用して可視化して注意が必要なIAM User Roleを把握してみた
こんにちは、コンサル部@大阪オフィスのTodaです。
IAMを管理する中でAssumeRoleやPassRoleによる権限昇格のパスを把握する事は注意が必要なIMAの把握に役に立つと考えております。
今回は IAMの権限昇格のパスを可視化してくれる「PMapper」を試してみます。
■ Github nccgroup / PMapper
https://github.com/nccgroup/PMapper
PMapperでできることは?
Principal Mapper (PMapper) はAWSアカウントまたはOrganizationsにて管理されているAWS Identity and Access Management (IAM)の分析をおこない権限昇格のチェックと図による可視化をおこないます。
当ツールを利用することで下記3点の把握が可能になります。
- AdministratorsAccessやIAMFullAccess権限を所有しているIAM User or Roleの把握
- 上記に権限昇格が可能なIAM User or Roleの把握
- 権限昇格のパスを矢印線で把握
権限昇格の関係性(パス)の確認にて、注意が必要な権限を所有しているIAMとPassRoleとAssumeRoleにより権限を引き受けることができるIAMを把握する事ができます。
■ 可視化サンプルイメージ
コマンドによる可視化をおこなうと下記イメージが生成されて全IAMと権限昇格のパスを確認出来ます。
下記イメージはサンプルとなります実際の表示ではフォントや図の配置が変わります。
画像内に表示される
「青枠」はAdministratorsAccessやIAMFullAccess権限を所有しているIAMを表します。
「赤枠」は「青枠」の権限を引き受けることができるIAMを表します。
「矢印」は権限昇格のパスを表します。
出力時にprivesc-only
オプションを指定する事で権限昇格が可能なIAMと背景が青色のみを選択して出力することも可能です。
privesc-only
オプションにて表示すると権限昇格の方法も表示されます。
IAMの管理は全て注意を頂く必要ございますが、背景が青色と赤色のIAMは特に注意が必要というのが簡易に把握出来る点が素晴らしいですね。
導入してみる
PMapperはGithubから取得を頂きDockerにて実行いただくパターンとPython3がインストールされている環境にてご利用いただけます。
また、グラフ描写用にGraphvizの追加インストールが必要になります。
今回はAWS CloudShellに導入をおこない利用してみます。
インストール
AWSマネージメントコンソールにログインを頂き、AWS CloudShellを起動します。
下記コマンドを実行いただきPMapperを利用出来る状態にします。
CloudShellにはGraphvizが導入されていないためインストールをおこないます。
$ sudo yum install -y graphviz
インストール完了後、PMapperのgitからクローンをおこないます。
$ git clone https://github.com/nccgroup/PMapper.git $ cd PMapper
取得した情報の中にrequirements.txt が格納されています。
requirements.txtはPythonのパッケージ管理(pip)で利用出来るファイルでインストールが必要なパッケージが記載されています。
ファイルを利用してパッケージのインストールをおこないます。
$ pip3 install --user -r requirements.txt
上記にてPMapperをご利用いただける状態になります。
利用してみる
graph
graph
コマンドは可視化に必要な情報の作成、一覧、詳細表示をする機能を利用頂けます。
まずはサブコマンドのcreate
を利用して必要な情報の収集をおこないます。
実行はチェックするリージョンとリソースの量で時間が変わります。
■ graph - CLI Reference
https://github.com/nccgroup/PMapper/wiki/CLI-Reference
$ python3 pmapper.py graph create or $ python3 pmapper.py graph create --include-regions ap-northeast-1
しばらくすると実行結果が表示されます。 表示内のadminsの項目はAdministratorsAccessやIAMFullAccess権限を所有するIAMの件数になります。
Graph Data for Account: AWSアカウントID # of Nodes: 80 (4 admins) # of Edges: 32 # of Groups: 1 # of (tracked) Policies: 186
1度必要な情報の作成をおこないますとサブコマンドのdisplay
にて内容の再確認も可能です。
最新の情報を取得する場合は再度create
を実行する必要があります。
$ python3 pmapper.py graph display Graph Data for Account: AWSアカウントID # of Nodes: 80 (4 admins) # of Edges: 32 # of Groups: 1 # of (tracked) Policies: 186
visualize
上記graph
で取得した情報はvisualize
コマンドを利用して可視化(グラフ表示)する必要があります。
出力できるファイルタイプは 標準:svg、png、dot、graphmlが選択いただけます。
■ visualize - CLI Reference
https://github.com/nccgroup/PMapper/wiki/CLI-Reference
$ python3 pmapper.py visualize or $ python3 pmapper.py visualize --filetype svg Created file ./99999999999.svg
CloudShellを利用して画像生成をした場合、表示出来ないため右上の[Actions]から[Download file]をクリックいただき生成したファイルをダウンロードします。
今回の手順の場合は、ファイルは/home/cloudshell-user/PMapper/[生成ファイル名] を指定します。
ファイルを表示しますと下記のようになっており権限昇格が可能なIAMについては矢印で関係性をわかりやすく表示されます。
また、権限昇格がないIAMは矢印のつながりがないため簡易に確認ができます。
今回検証環境でIAMロール等が多く設定されているため大きな図が生成されています。
注意が必要なIAMと権限昇格の部分だけを出力する場合は下記コマンドをご利用ください。
$ python3 pmapper.py visualize --only-privesc Created file ./99999999999-privesc-risks.svg
only-privesc
オプションにて出力すると権限昇格の方法も表示されます。
さいごに
今回はPrincipal Mapper (PMapper) を利用してIAM権限昇格のパスを可視化してみました。
通常の可視化ではAdministratorsAccessとIAMFullAccessの権限を所有するIAMが青色で権限昇格が可能なIAMを赤色で表示をおこない注意が必要な部分を簡易に確認する事ができる事を確認しています。
また、当ツールはAWS Organizationsで利用できる orgsコマンドや指定した権限で絞り込む queryコマンドもありますので別記事でご案内させていただきます。
少しでもお客様の参考になればと考えております。
参考にさせていただいたサイト
■ IAMの権限昇格を可視化する「PMapper」 - ペネトレーションしのべくん
https://shinobe179.hatenablog.com/entry/2022/08/09/233421